home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / locale.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  49KB  |  1,646 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. """ Locale support.
  5.  
  6.     The module provides low-level access to the C lib's locale APIs
  7.     and adds high level number formatting APIs as well as a locale
  8.     aliasing engine to complement these.
  9.  
  10.     The aliasing engine includes support for many commonly used locale
  11.     names and maps them to values suitable for passing to the C lib's
  12.     setlocale() function. It also includes default encodings for all
  13.     supported locale names.
  14.  
  15. """
  16. import sys
  17. import encodings
  18. import encodings.aliases as encodings
  19. __all__ = [
  20.     'getlocale',
  21.     'getdefaultlocale',
  22.     'getpreferredencoding',
  23.     'Error',
  24.     'setlocale',
  25.     'resetlocale',
  26.     'localeconv',
  27.     'strcoll',
  28.     'strxfrm',
  29.     'str',
  30.     'atof',
  31.     'atoi',
  32.     'format',
  33.     'format_string',
  34.     'currency',
  35.     'normalize',
  36.     'LC_CTYPE',
  37.     'LC_COLLATE',
  38.     'LC_TIME',
  39.     'LC_MONETARY',
  40.     'LC_NUMERIC',
  41.     'LC_ALL',
  42.     'CHAR_MAX']
  43.  
  44. try:
  45.     from _locale import *
  46. except ImportError:
  47.     CHAR_MAX = 127
  48.     LC_ALL = 6
  49.     LC_COLLATE = 3
  50.     LC_CTYPE = 0
  51.     LC_MESSAGES = 5
  52.     LC_MONETARY = 4
  53.     LC_NUMERIC = 1
  54.     LC_TIME = 2
  55.     Error = ValueError
  56.     
  57.     def localeconv():
  58.         ''' localeconv() -> dict.
  59.             Returns numeric and monetary locale-specific parameters.
  60.         '''
  61.         return {
  62.             'grouping': [
  63.                 127],
  64.             'currency_symbol': '',
  65.             'n_sign_posn': 127,
  66.             'p_cs_precedes': 127,
  67.             'n_cs_precedes': 127,
  68.             'mon_grouping': [],
  69.             'n_sep_by_space': 127,
  70.             'decimal_point': '.',
  71.             'negative_sign': '',
  72.             'positive_sign': '',
  73.             'p_sep_by_space': 127,
  74.             'int_curr_symbol': '',
  75.             'p_sign_posn': 127,
  76.             'thousands_sep': '',
  77.             'mon_thousands_sep': '',
  78.             'frac_digits': 127,
  79.             'mon_decimal_point': '',
  80.             'int_frac_digits': 127 }
  81.  
  82.     
  83.     def setlocale(category, value = None):
  84.         ''' setlocale(integer,string=None) -> string.
  85.             Activates/queries locale processing.
  86.         '''
  87.         if value not in (None, '', 'C'):
  88.             raise Error, '_locale emulation only supports "C" locale'
  89.         
  90.         return 'C'
  91.  
  92.     
  93.     def strcoll(a, b):
  94.         ''' strcoll(string,string) -> int.
  95.             Compares two strings according to the locale.
  96.         '''
  97.         return cmp(a, b)
  98.  
  99.     
  100.     def strxfrm(s):
  101.         ''' strxfrm(string) -> string.
  102.             Returns a string that behaves for cmp locale-aware.
  103.         '''
  104.         return s
  105.  
  106.  
  107.  
  108. def _group(s, monetary = False):
  109.     conv = localeconv()
  110.     if not monetary or 'mon_thousands_sep':
  111.         pass
  112.     thousands_sep = conv['thousands_sep']
  113.     if not monetary or 'mon_grouping':
  114.         pass
  115.     grouping = conv['grouping']
  116.     if not grouping:
  117.         return (s, 0)
  118.     
  119.     result = ''
  120.     seps = 0
  121.     spaces = ''
  122.     if s[-1] == ' ':
  123.         sp = s.find(' ')
  124.         spaces = s[sp:]
  125.         s = s[:sp]
  126.     
  127.     while s and grouping:
  128.         if grouping[0] == CHAR_MAX:
  129.             break
  130.         elif grouping[0] != 0:
  131.             group = grouping[0]
  132.             grouping = grouping[1:]
  133.         
  134.         if result:
  135.             result = s[-group:] + thousands_sep + result
  136.             seps += 1
  137.         else:
  138.             result = s[-group:]
  139.         s = s[:-group]
  140.         if s and s[-1] not in '0123456789':
  141.             return (s + result + spaces, seps)
  142.             continue
  143.     if not result:
  144.         return (s + spaces, seps)
  145.     
  146.     if s:
  147.         result = s + thousands_sep + result
  148.         seps += 1
  149.     
  150.     return (result + spaces, seps)
  151.  
  152.  
  153. def format(percent, value, grouping = False, monetary = False, *additional):
  154.     """Returns the locale-aware substitution of a %? specifier
  155.     (percent).
  156.  
  157.     additional is for format strings which contain one or more
  158.     '*' modifiers."""
  159.     if percent[0] != '%':
  160.         raise ValueError('format() must be given exactly one %char format specifier')
  161.     
  162.     if additional:
  163.         formatted = percent % ((value,) + additional)
  164.     else:
  165.         formatted = percent % value
  166.     if percent[-1] in 'eEfFgG':
  167.         seps = 0
  168.         parts = formatted.split('.')
  169.         if grouping:
  170.             (parts[0], seps) = _group(parts[0], monetary = monetary)
  171.         
  172.         if not monetary or 'mon_decimal_point':
  173.             pass
  174.         decimal_point = localeconv()['decimal_point']
  175.         formatted = decimal_point.join(parts)
  176.         while seps:
  177.             sp = formatted.find(' ')
  178.             if sp == -1:
  179.                 break
  180.             
  181.             formatted = formatted[:sp] + formatted[sp + 1:]
  182.             seps -= 1
  183.     elif percent[-1] in 'diu':
  184.         if grouping:
  185.             formatted = _group(formatted, monetary = monetary)[0]
  186.         
  187.     
  188.     return formatted
  189.  
  190. import re
  191. import operator
  192. _percent_re = re.compile('%(?:\\((?P<key>.*?)\\))?(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
  193.  
  194. def format_string(f, val, grouping = False):
  195.     '''Formats a string in the same way that the % formatting would use,
  196.     but takes the current locale into account.
  197.     Grouping is applied if the third parameter is true.'''
  198.     percents = list(_percent_re.finditer(f))
  199.     new_f = _percent_re.sub('%s', f)
  200.     if isinstance(val, tuple):
  201.         new_val = list(val)
  202.         i = 0
  203.         for perc in percents:
  204.             starcount = perc.group('modifiers').count('*')
  205.             new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i + 1:i + 1 + starcount])
  206.             del new_val[i + 1:i + 1 + starcount]
  207.             i += 1 + starcount
  208.         
  209.         val = tuple(new_val)
  210.     elif operator.isMappingType(val):
  211.         for perc in percents:
  212.             key = perc.group('key')
  213.             val[key] = format(perc.group(), val[key], grouping)
  214.         
  215.     else:
  216.         val = format(percents[0].group(), val, grouping)
  217.     return new_f % val
  218.  
  219.  
  220. def currency(val, symbol = True, grouping = False, international = False):
  221.     '''Formats val according to the currency settings
  222.     in the current locale.'''
  223.     conv = localeconv()
  224.     if not international or 'int_frac_digits':
  225.         pass
  226.     digits = conv['frac_digits']
  227.     if digits == 127:
  228.         raise ValueError("Currency formatting is not possible using the 'C' locale.")
  229.     
  230.     s = format('%%.%if' % digits, abs(val), grouping, monetary = True)
  231.     s = '<' + s + '>'
  232.     if symbol:
  233.         if not international or 'int_curr_symbol':
  234.             pass
  235.         smb = conv['currency_symbol']
  236.         if not val < 0 or 'n_cs_precedes':
  237.             pass
  238.         precedes = conv['p_cs_precedes']
  239.         if not val < 0 or 'n_sep_by_space':
  240.             pass
  241.         separated = conv['p_sep_by_space']
  242.         s = None + s if precedes else '' + smb
  243.     
  244.     if not val < 0 or 'n_sign_posn':
  245.         pass
  246.     sign_pos = conv['p_sign_posn']
  247.     if not val < 0 or 'negative_sign':
  248.         pass
  249.     sign = conv['positive_sign']
  250.     if sign_pos == 0:
  251.         s = '(' + s + ')'
  252.     elif sign_pos == 1:
  253.         s = sign + s
  254.     elif sign_pos == 2:
  255.         s = s + sign
  256.     elif sign_pos == 3:
  257.         s = s.replace('<', sign)
  258.     elif sign_pos == 4:
  259.         s = s.replace('>', sign)
  260.     else:
  261.         s = sign + s
  262.     return s.replace('<', '').replace('>', '')
  263.  
  264.  
  265. def str(val):
  266.     '''Convert float to integer, taking the locale into account.'''
  267.     return format('%.12g', val)
  268.  
  269.  
  270. def atof(string, func = float):
  271.     '''Parses a string as a float according to the locale settings.'''
  272.     ts = localeconv()['thousands_sep']
  273.     if ts:
  274.         string = string.replace(ts, '')
  275.     
  276.     dd = localeconv()['decimal_point']
  277.     if dd:
  278.         string = string.replace(dd, '.')
  279.     
  280.     return func(string)
  281.  
  282.  
  283. def atoi(str):
  284.     '''Converts a string to an integer according to the locale settings.'''
  285.     return atof(str, int)
  286.  
  287.  
  288. def _test():
  289.     setlocale(LC_ALL, '')
  290.     s1 = format('%d', 123456789, 1)
  291.     print s1, 'is', atoi(s1)
  292.     s1 = str(3.14)
  293.     print s1, 'is', atof(s1)
  294.  
  295. _setlocale = setlocale
  296.  
  297. def normalize(localename):
  298.     ''' Returns a normalized locale code for the given locale
  299.         name.
  300.  
  301.         The returned locale code is formatted for use with
  302.         setlocale().
  303.  
  304.         If normalization fails, the original name is returned
  305.         unchanged.
  306.  
  307.         If the given encoding is not known, the function defaults to
  308.         the default encoding for the locale code just like setlocale()
  309.         does.
  310.  
  311.     '''
  312.     fullname = localename.lower()
  313.     if ':' in fullname:
  314.         fullname = fullname.replace(':', '.')
  315.     
  316.     if '.' in fullname:
  317.         (langname, encoding) = fullname.split('.')[:2]
  318.         fullname = langname + '.' + encoding
  319.     else:
  320.         langname = fullname
  321.         encoding = ''
  322.     norm_encoding = encoding.replace('-', '')
  323.     norm_encoding = norm_encoding.replace('_', '')
  324.     lookup_name = langname + '.' + encoding
  325.     code = locale_alias.get(lookup_name, None)
  326.     if code is not None:
  327.         return code
  328.     
  329.     code = locale_alias.get(langname, None)
  330.     if code is not None:
  331.         if '.' in code:
  332.             (langname, defenc) = code.split('.')
  333.         else:
  334.             langname = code
  335.             defenc = ''
  336.         if encoding:
  337.             norm_encoding = encodings.normalize_encoding(encoding)
  338.             norm_encoding = encodings.aliases.aliases.get(norm_encoding, norm_encoding)
  339.             encoding = locale_encoding_alias.get(norm_encoding, norm_encoding)
  340.         else:
  341.             encoding = defenc
  342.         if encoding:
  343.             return langname + '.' + encoding
  344.         else:
  345.             return langname
  346.     else:
  347.         return localename
  348.  
  349.  
  350. def _parse_localename(localename):
  351.     ''' Parses the locale code for localename and returns the
  352.         result as tuple (language code, encoding).
  353.  
  354.         The localename is normalized and passed through the locale
  355.         alias engine. A ValueError is raised in case the locale name
  356.         cannot be parsed.
  357.  
  358.         The language code corresponds to RFC 1766.  code and encoding
  359.         can be None in case the values cannot be determined or are
  360.         unknown to this implementation.
  361.  
  362.     '''
  363.     code = normalize(localename)
  364.     if '@' in code:
  365.         (code, modifier) = code.split('@')
  366.         if modifier == 'euro' and '.' not in code:
  367.             return (code, 'iso-8859-15')
  368.         
  369.     
  370.     if '.' in code:
  371.         return tuple(code.split('.')[:2])
  372.     elif code == 'C':
  373.         return (None, None)
  374.     
  375.     raise ValueError, 'unknown locale: %s' % localename
  376.  
  377.  
  378. def _build_localename(localetuple):
  379.     ''' Builds a locale code from the given tuple (language code,
  380.         encoding).
  381.  
  382.         No aliasing or normalizing takes place.
  383.  
  384.     '''
  385.     (language, encoding) = localetuple
  386.     if language is None:
  387.         language = 'C'
  388.     
  389.     if encoding is None:
  390.         return language
  391.     else:
  392.         return language + '.' + encoding
  393.  
  394.  
  395. def getdefaultlocale(envvars = ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
  396.     ''' Tries to determine the default locale settings and returns
  397.         them as tuple (language code, encoding).
  398.  
  399.         According to POSIX, a program which has not called
  400.         setlocale(LC_ALL, "") runs using the portable \'C\' locale.
  401.         Calling setlocale(LC_ALL, "") lets it use the default locale as
  402.         defined by the LANG variable. Since we don\'t want to interfere
  403.         with the current locale setting we thus emulate the behavior
  404.         in the way described above.
  405.  
  406.         To maintain compatibility with other platforms, not only the
  407.         LANG variable is tested, but a list of variables given as
  408.         envvars parameter. The first found to be defined will be
  409.         used. envvars defaults to the search path used in GNU gettext;
  410.         it must always contain the variable name \'LANG\'.
  411.  
  412.         Except for the code \'C\', the language code corresponds to RFC
  413.         1766.  code and encoding can be None in case the values cannot
  414.         be determined.
  415.  
  416.     '''
  417.     
  418.     try:
  419.         import _locale as _locale
  420.         (code, encoding) = _locale._getdefaultlocale()
  421.     except (ImportError, AttributeError):
  422.         pass
  423.  
  424.     if sys.platform == 'win32' and code and code[:2] == '0x':
  425.         code = windows_locale.get(int(code, 0))
  426.     
  427.     return (code, encoding)
  428.     import os as os
  429.     lookup = os.environ.get
  430.     for variable in envvars:
  431.         localename = lookup(variable, None)
  432.         if localename:
  433.             if variable == 'LANGUAGE':
  434.                 localename = localename.split(':')[0]
  435.             
  436.             break
  437.             continue
  438.     else:
  439.         localename = 'C'
  440.     return _parse_localename(localename)
  441.  
  442.  
  443. def getlocale(category = LC_CTYPE):
  444.     """ Returns the current setting for the given locale category as
  445.         tuple (language code, encoding).
  446.  
  447.         category may be one of the LC_* value except LC_ALL. It
  448.         defaults to LC_CTYPE.
  449.  
  450.         Except for the code 'C', the language code corresponds to RFC
  451.         1766.  code and encoding can be None in case the values cannot
  452.         be determined.
  453.  
  454.     """
  455.     localename = _setlocale(category)
  456.     if category == LC_ALL and ';' in localename:
  457.         raise TypeError, 'category LC_ALL is not supported'
  458.     
  459.     return _parse_localename(localename)
  460.  
  461.  
  462. def setlocale(category, locale = None):
  463.     ''' Set the locale for the given category.  The locale can be
  464.         a string, a locale tuple (language code, encoding), or None.
  465.  
  466.         Locale tuples are converted to strings the locale aliasing
  467.         engine.  Locale strings are passed directly to the C lib.
  468.  
  469.         category may be given as one of the LC_* values.
  470.  
  471.     '''
  472.     if locale and type(locale) is not type(''):
  473.         locale = normalize(_build_localename(locale))
  474.     
  475.     return _setlocale(category, locale)
  476.  
  477.  
  478. def resetlocale(category = LC_ALL):
  479.     ''' Sets the locale for category to the default setting.
  480.  
  481.         The default setting is determined by calling
  482.         getdefaultlocale(). category defaults to LC_ALL.
  483.  
  484.     '''
  485.     _setlocale(category, _build_localename(getdefaultlocale()))
  486.  
  487. if sys.platform in ('win32', 'darwin', 'mac'):
  488.     
  489.     def getpreferredencoding(do_setlocale = True):
  490.         '''Return the charset that the user is likely using.'''
  491.         import _locale
  492.         return _locale._getdefaultlocale()[1]
  493.  
  494. else:
  495.     
  496.     try:
  497.         CODESET
  498.     except NameError:
  499.         
  500.         def getpreferredencoding(do_setlocale = True):
  501.             '''Return the charset that the user is likely using,
  502.             by looking at environment variables.'''
  503.             return getdefaultlocale()[1]
  504.  
  505.  
  506.     
  507.     def getpreferredencoding(do_setlocale = True):
  508.         '''Return the charset that the user is likely using,
  509.             according to the system configuration.'''
  510.         if do_setlocale:
  511.             oldloc = setlocale(LC_CTYPE)
  512.             setlocale(LC_CTYPE, '')
  513.             result = nl_langinfo(CODESET)
  514.             setlocale(LC_CTYPE, oldloc)
  515.             return result
  516.         else:
  517.             return nl_langinfo(CODESET)
  518.  
  519. locale_encoding_alias = {
  520.     '437': 'C',
  521.     'c': 'C',
  522.     'en': 'ISO8859-1',
  523.     'jis': 'JIS7',
  524.     'jis7': 'JIS7',
  525.     'ajec': 'eucJP',
  526.     'ascii': 'ISO8859-1',
  527.     'latin_1': 'ISO8859-1',
  528.     'iso8859_1': 'ISO8859-1',
  529.     'iso8859_10': 'ISO8859-10',
  530.     'iso8859_11': 'ISO8859-11',
  531.     'iso8859_13': 'ISO8859-13',
  532.     'iso8859_14': 'ISO8859-14',
  533.     'iso8859_15': 'ISO8859-15',
  534.     'iso8859_2': 'ISO8859-2',
  535.     'iso8859_3': 'ISO8859-3',
  536.     'iso8859_4': 'ISO8859-4',
  537.     'iso8859_5': 'ISO8859-5',
  538.     'iso8859_6': 'ISO8859-6',
  539.     'iso8859_7': 'ISO8859-7',
  540.     'iso8859_8': 'ISO8859-8',
  541.     'iso8859_9': 'ISO8859-9',
  542.     'iso2022_jp': 'JIS7',
  543.     'shift_jis': 'SJIS',
  544.     'tactis': 'TACTIS',
  545.     'euc_jp': 'eucJP',
  546.     'euc_kr': 'eucKR',
  547.     'utf_8': 'UTF8',
  548.     'koi8_r': 'KOI8-R',
  549.     'koi8_u': 'KOI8-U' }
  550. locale_alias = {
  551.     'a3': 'a3_AZ.KOI8-C',
  552.     'a3_az': 'a3_AZ.KOI8-C',
  553.     'a3_az.koi8c': 'a3_AZ.KOI8-C',
  554.     'af': 'af_ZA.ISO8859-1',
  555.     'af_za': 'af_ZA.ISO8859-1',
  556.     'af_za.iso88591': 'af_ZA.ISO8859-1',
  557.     'am': 'am_ET.UTF-8',
  558.     'am_et': 'am_ET.UTF-8',
  559.     'american': 'en_US.ISO8859-1',
  560.     'american.iso88591': 'en_US.ISO8859-1',
  561.     'ar': 'ar_AA.ISO8859-6',
  562.     'ar_aa': 'ar_AA.ISO8859-6',
  563.     'ar_aa.iso88596': 'ar_AA.ISO8859-6',
  564.     'ar_ae': 'ar_AE.ISO8859-6',
  565.     'ar_ae.iso88596': 'ar_AE.ISO8859-6',
  566.     'ar_bh': 'ar_BH.ISO8859-6',
  567.     'ar_bh.iso88596': 'ar_BH.ISO8859-6',
  568.     'ar_dz': 'ar_DZ.ISO8859-6',
  569.     'ar_dz.iso88596': 'ar_DZ.ISO8859-6',
  570.     'ar_eg': 'ar_EG.ISO8859-6',
  571.     'ar_eg.iso88596': 'ar_EG.ISO8859-6',
  572.     'ar_iq': 'ar_IQ.ISO8859-6',
  573.     'ar_iq.iso88596': 'ar_IQ.ISO8859-6',
  574.     'ar_jo': 'ar_JO.ISO8859-6',
  575.     'ar_jo.iso88596': 'ar_JO.ISO8859-6',
  576.     'ar_kw': 'ar_KW.ISO8859-6',
  577.     'ar_kw.iso88596': 'ar_KW.ISO8859-6',
  578.     'ar_lb': 'ar_LB.ISO8859-6',
  579.     'ar_lb.iso88596': 'ar_LB.ISO8859-6',
  580.     'ar_ly': 'ar_LY.ISO8859-6',
  581.     'ar_ly.iso88596': 'ar_LY.ISO8859-6',
  582.     'ar_ma': 'ar_MA.ISO8859-6',
  583.     'ar_ma.iso88596': 'ar_MA.ISO8859-6',
  584.     'ar_om': 'ar_OM.ISO8859-6',
  585.     'ar_om.iso88596': 'ar_OM.ISO8859-6',
  586.     'ar_qa': 'ar_QA.ISO8859-6',
  587.     'ar_qa.iso88596': 'ar_QA.ISO8859-6',
  588.     'ar_sa': 'ar_SA.ISO8859-6',
  589.     'ar_sa.iso88596': 'ar_SA.ISO8859-6',
  590.     'ar_sd': 'ar_SD.ISO8859-6',
  591.     'ar_sd.iso88596': 'ar_SD.ISO8859-6',
  592.     'ar_sy': 'ar_SY.ISO8859-6',
  593.     'ar_sy.iso88596': 'ar_SY.ISO8859-6',
  594.     'ar_tn': 'ar_TN.ISO8859-6',
  595.     'ar_tn.iso88596': 'ar_TN.ISO8859-6',
  596.     'ar_ye': 'ar_YE.ISO8859-6',
  597.     'ar_ye.iso88596': 'ar_YE.ISO8859-6',
  598.     'arabic': 'ar_AA.ISO8859-6',
  599.     'arabic.iso88596': 'ar_AA.ISO8859-6',
  600.     'as': 'as_IN.UTF-8',
  601.     'az': 'az_AZ.ISO8859-9E',
  602.     'az_az': 'az_AZ.ISO8859-9E',
  603.     'az_az.iso88599e': 'az_AZ.ISO8859-9E',
  604.     'be': 'be_BY.CP1251',
  605.     'be_by': 'be_BY.CP1251',
  606.     'be_by.cp1251': 'be_BY.CP1251',
  607.     'be_by.microsoftcp1251': 'be_BY.CP1251',
  608.     'bg': 'bg_BG.CP1251',
  609.     'bg_bg': 'bg_BG.CP1251',
  610.     'bg_bg.cp1251': 'bg_BG.CP1251',
  611.     'bg_bg.iso88595': 'bg_BG.ISO8859-5',
  612.     'bg_bg.koi8r': 'bg_BG.KOI8-R',
  613.     'bg_bg.microsoftcp1251': 'bg_BG.CP1251',
  614.     'bokmal': 'nb_NO.ISO8859-1',
  615.     'bokm\xe5l': 'nb_NO.ISO8859-1',
  616.     'bokm\xef\xbf\xbd': 'nb_NO.ISO8859-1',
  617.     'br': 'br_FR.ISO8859-1',
  618.     'br_fr': 'br_FR.ISO8859-1',
  619.     'br_fr.iso88591': 'br_FR.ISO8859-1',
  620.     'br_fr.iso885914': 'br_FR.ISO8859-14',
  621.     'br_fr.iso885915': 'br_FR.ISO8859-15',
  622.     'br_fr.iso885915@euro': 'br_FR.ISO8859-15',
  623.     'br_fr.utf8@euro': 'br_FR.UTF-8',
  624.     'br_fr@euro': 'br_FR.ISO8859-15',
  625.     'bs': 'bs_BA.ISO8859-2',
  626.     'bs_ba': 'bs_BA.ISO8859-2',
  627.     'bs_ba.iso88592': 'bs_BA.ISO8859-2',
  628.     'bulgarian': 'bg_BG.CP1251',
  629.     'c': 'C',
  630.     'c-french': 'fr_CA.ISO8859-1',
  631.     'c-french.iso88591': 'fr_CA.ISO8859-1',
  632.     'c.en': 'C',
  633.     'c.iso88591': 'en_US.ISO8859-1',
  634.     'c_c': 'C',
  635.     'c_c.c': 'C',
  636.     'ca': 'ca_ES.ISO8859-1',
  637.     'ca_ad': 'ca_AD.ISO8859-1',
  638.     'ca_ad.iso88591': 'ca_AD.ISO8859-1',
  639.     'ca_ad.iso885915': 'ca_AD.ISO8859-15',
  640.     'ca_ad.iso885915@euro': 'ca_AD.ISO8859-15',
  641.     'ca_ad.utf8@euro': 'ca_AD.UTF-8',
  642.     'ca_ad@euro': 'ca_AD.ISO8859-15',
  643.     'ca_es': 'ca_ES.ISO8859-1',
  644.     'ca_es.iso88591': 'ca_ES.ISO8859-1',
  645.     'ca_es.iso885915': 'ca_ES.ISO8859-15',
  646.     'ca_es.iso885915@euro': 'ca_ES.ISO8859-15',
  647.     'ca_es.utf8@euro': 'ca_ES.UTF-8',
  648.     'ca_es@euro': 'ca_ES.ISO8859-15',
  649.     'ca_fr': 'ca_FR.ISO8859-1',
  650.     'ca_fr.iso88591': 'ca_FR.ISO8859-1',
  651.     'ca_fr.iso885915': 'ca_FR.ISO8859-15',
  652.     'ca_fr.iso885915@euro': 'ca_FR.ISO8859-15',
  653.     'ca_fr.utf8@euro': 'ca_FR.UTF-8',
  654.     'ca_fr@euro': 'ca_FR.ISO8859-15',
  655.     'ca_it': 'ca_IT.ISO8859-1',
  656.     'ca_it.iso88591': 'ca_IT.ISO8859-1',
  657.     'ca_it.iso885915': 'ca_IT.ISO8859-15',
  658.     'ca_it.iso885915@euro': 'ca_IT.ISO8859-15',
  659.     'ca_it.utf8@euro': 'ca_IT.UTF-8',
  660.     'ca_it@euro': 'ca_IT.ISO8859-15',
  661.     'catalan': 'ca_ES.ISO8859-1',
  662.     'cextend': 'en_US.ISO8859-1',
  663.     'cextend.en': 'en_US.ISO8859-1',
  664.     'chinese-s': 'zh_CN.eucCN',
  665.     'chinese-t': 'zh_TW.eucTW',
  666.     'croatian': 'hr_HR.ISO8859-2',
  667.     'cs': 'cs_CZ.ISO8859-2',
  668.     'cs_cs': 'cs_CZ.ISO8859-2',
  669.     'cs_cs.iso88592': 'cs_CS.ISO8859-2',
  670.     'cs_cz': 'cs_CZ.ISO8859-2',
  671.     'cs_cz.iso88592': 'cs_CZ.ISO8859-2',
  672.     'cy': 'cy_GB.ISO8859-1',
  673.     'cy_gb': 'cy_GB.ISO8859-1',
  674.     'cy_gb.iso88591': 'cy_GB.ISO8859-1',
  675.     'cy_gb.iso885914': 'cy_GB.ISO8859-14',
  676.     'cy_gb.iso885915': 'cy_GB.ISO8859-15',
  677.     'cy_gb@euro': 'cy_GB.ISO8859-15',
  678.     'cz': 'cs_CZ.ISO8859-2',
  679.     'cz_cz': 'cs_CZ.ISO8859-2',
  680.     'czech': 'cs_CZ.ISO8859-2',
  681.     'da': 'da_DK.ISO8859-1',
  682.     'da_dk': 'da_DK.ISO8859-1',
  683.     'da_dk.88591': 'da_DK.ISO8859-1',
  684.     'da_dk.885915': 'da_DK.ISO8859-15',
  685.     'da_dk.iso88591': 'da_DK.ISO8859-1',
  686.     'da_dk.iso885915': 'da_DK.ISO8859-15',
  687.     'da_dk@euro': 'da_DK.ISO8859-15',
  688.     'danish': 'da_DK.ISO8859-1',
  689.     'danish.iso88591': 'da_DK.ISO8859-1',
  690.     'dansk': 'da_DK.ISO8859-1',
  691.     'de': 'de_DE.ISO8859-1',
  692.     'de_at': 'de_AT.ISO8859-1',
  693.     'de_at.iso88591': 'de_AT.ISO8859-1',
  694.     'de_at.iso885915': 'de_AT.ISO8859-15',
  695.     'de_at.iso885915@euro': 'de_AT.ISO8859-15',
  696.     'de_at.utf8@euro': 'de_AT.UTF-8',
  697.     'de_at@euro': 'de_AT.ISO8859-15',
  698.     'de_be': 'de_BE.ISO8859-1',
  699.     'de_be.iso88591': 'de_BE.ISO8859-1',
  700.     'de_be.iso885915': 'de_BE.ISO8859-15',
  701.     'de_be.iso885915@euro': 'de_BE.ISO8859-15',
  702.     'de_be.utf8@euro': 'de_BE.UTF-8',
  703.     'de_be@euro': 'de_BE.ISO8859-15',
  704.     'de_ch': 'de_CH.ISO8859-1',
  705.     'de_ch.iso88591': 'de_CH.ISO8859-1',
  706.     'de_ch.iso885915': 'de_CH.ISO8859-15',
  707.     'de_ch@euro': 'de_CH.ISO8859-15',
  708.     'de_de': 'de_DE.ISO8859-1',
  709.     'de_de.88591': 'de_DE.ISO8859-1',
  710.     'de_de.885915': 'de_DE.ISO8859-15',
  711.     'de_de.885915@euro': 'de_DE.ISO8859-15',
  712.     'de_de.iso88591': 'de_DE.ISO8859-1',
  713.     'de_de.iso885915': 'de_DE.ISO8859-15',
  714.     'de_de.iso885915@euro': 'de_DE.ISO8859-15',
  715.     'de_de.utf8@euro': 'de_DE.UTF-8',
  716.     'de_de@euro': 'de_DE.ISO8859-15',
  717.     'de_lu': 'de_LU.ISO8859-1',
  718.     'de_lu.iso88591': 'de_LU.ISO8859-1',
  719.     'de_lu.iso885915': 'de_LU.ISO8859-15',
  720.     'de_lu.iso885915@euro': 'de_LU.ISO8859-15',
  721.     'de_lu.utf8@euro': 'de_LU.UTF-8',
  722.     'de_lu@euro': 'de_LU.ISO8859-15',
  723.     'deutsch': 'de_DE.ISO8859-1',
  724.     'dutch': 'nl_NL.ISO8859-1',
  725.     'dutch.iso88591': 'nl_BE.ISO8859-1',
  726.     'ee': 'ee_EE.ISO8859-4',
  727.     'ee_ee': 'ee_EE.ISO8859-4',
  728.     'ee_ee.iso88594': 'ee_EE.ISO8859-4',
  729.     'eesti': 'et_EE.ISO8859-1',
  730.     'el': 'el_GR.ISO8859-7',
  731.     'el_gr': 'el_GR.ISO8859-7',
  732.     'el_gr.iso88597': 'el_GR.ISO8859-7',
  733.     'el_gr@euro': 'el_GR.ISO8859-15',
  734.     'en': 'en_US.ISO8859-1',
  735.     'en.iso88591': 'en_US.ISO8859-1',
  736.     'en_au': 'en_AU.ISO8859-1',
  737.     'en_au.iso88591': 'en_AU.ISO8859-1',
  738.     'en_be': 'en_BE.ISO8859-1',
  739.     'en_be@euro': 'en_BE.ISO8859-15',
  740.     'en_bw': 'en_BW.ISO8859-1',
  741.     'en_bw.iso88591': 'en_BW.ISO8859-1',
  742.     'en_ca': 'en_CA.ISO8859-1',
  743.     'en_ca.iso88591': 'en_CA.ISO8859-1',
  744.     'en_dk': 'en_DK.ISO8859-1',
  745.     'en_dk.iso88591': 'en_DK.ISO8859-1',
  746.     'en_dk.iso885915': 'en_DK.ISO8859-15',
  747.     'en_gb': 'en_GB.ISO8859-1',
  748.     'en_gb.88591': 'en_GB.ISO8859-1',
  749.     'en_gb.iso88591': 'en_GB.ISO8859-1',
  750.     'en_gb.iso885915': 'en_GB.ISO8859-15',
  751.     'en_gb@euro': 'en_GB.ISO8859-15',
  752.     'en_hk': 'en_HK.ISO8859-1',
  753.     'en_hk.iso88591': 'en_HK.ISO8859-1',
  754.     'en_ie': 'en_IE.ISO8859-1',
  755.     'en_ie.iso88591': 'en_IE.ISO8859-1',
  756.     'en_ie.iso885915': 'en_IE.ISO8859-15',
  757.     'en_ie.iso885915@euro': 'en_IE.ISO8859-15',
  758.     'en_ie.utf8@euro': 'en_IE.UTF-8',
  759.     'en_ie@euro': 'en_IE.ISO8859-15',
  760.     'en_in': 'en_IN.ISO8859-1',
  761.     'en_nz': 'en_NZ.ISO8859-1',
  762.     'en_nz.iso88591': 'en_NZ.ISO8859-1',
  763.     'en_ph': 'en_PH.ISO8859-1',
  764.     'en_ph.iso88591': 'en_PH.ISO8859-1',
  765.     'en_sg': 'en_SG.ISO8859-1',
  766.     'en_sg.iso88591': 'en_SG.ISO8859-1',
  767.     'en_uk': 'en_GB.ISO8859-1',
  768.     'en_us': 'en_US.ISO8859-1',
  769.     'en_us.88591': 'en_US.ISO8859-1',
  770.     'en_us.885915': 'en_US.ISO8859-15',
  771.     'en_us.iso88591': 'en_US.ISO8859-1',
  772.     'en_us.iso885915': 'en_US.ISO8859-15',
  773.     'en_us.iso885915@euro': 'en_US.ISO8859-15',
  774.     'en_us@euro': 'en_US.ISO8859-15',
  775.     'en_us@euro@euro': 'en_US.ISO8859-15',
  776.     'en_za': 'en_ZA.ISO8859-1',
  777.     'en_za.88591': 'en_ZA.ISO8859-1',
  778.     'en_za.iso88591': 'en_ZA.ISO8859-1',
  779.     'en_za.iso885915': 'en_ZA.ISO8859-15',
  780.     'en_za@euro': 'en_ZA.ISO8859-15',
  781.     'en_zw': 'en_ZW.ISO8859-1',
  782.     'en_zw.iso88591': 'en_ZW.ISO8859-1',
  783.     'eng_gb': 'en_GB.ISO8859-1',
  784.     'eng_gb.8859': 'en_GB.ISO8859-1',
  785.     'english': 'en_EN.ISO8859-1',
  786.     'english.iso88591': 'en_US.ISO8859-1',
  787.     'english_uk': 'en_GB.ISO8859-1',
  788.     'english_uk.8859': 'en_GB.ISO8859-1',
  789.     'english_united-states': 'en_US.ISO8859-1',
  790.     'english_united-states.437': 'C',
  791.     'english_us': 'en_US.ISO8859-1',
  792.     'english_us.8859': 'en_US.ISO8859-1',
  793.     'english_us.ascii': 'en_US.ISO8859-1',
  794.     'eo': 'eo_XX.ISO8859-3',
  795.     'eo_eo': 'eo_EO.ISO8859-3',
  796.     'eo_eo.iso88593': 'eo_EO.ISO8859-3',
  797.     'eo_xx': 'eo_XX.ISO8859-3',
  798.     'eo_xx.iso88593': 'eo_XX.ISO8859-3',
  799.     'es': 'es_ES.ISO8859-1',
  800.     'es_ar': 'es_AR.ISO8859-1',
  801.     'es_ar.iso88591': 'es_AR.ISO8859-1',
  802.     'es_bo': 'es_BO.ISO8859-1',
  803.     'es_bo.iso88591': 'es_BO.ISO8859-1',
  804.     'es_cl': 'es_CL.ISO8859-1',
  805.     'es_cl.iso88591': 'es_CL.ISO8859-1',
  806.     'es_co': 'es_CO.ISO8859-1',
  807.     'es_co.iso88591': 'es_CO.ISO8859-1',
  808.     'es_cr': 'es_CR.ISO8859-1',
  809.     'es_cr.iso88591': 'es_CR.ISO8859-1',
  810.     'es_do': 'es_DO.ISO8859-1',
  811.     'es_do.iso88591': 'es_DO.ISO8859-1',
  812.     'es_ec': 'es_EC.ISO8859-1',
  813.     'es_ec.iso88591': 'es_EC.ISO8859-1',
  814.     'es_es': 'es_ES.ISO8859-1',
  815.     'es_es.88591': 'es_ES.ISO8859-1',
  816.     'es_es.iso88591': 'es_ES.ISO8859-1',
  817.     'es_es.iso885915': 'es_ES.ISO8859-15',
  818.     'es_es.iso885915@euro': 'es_ES.ISO8859-15',
  819.     'es_es.utf8@euro': 'es_ES.UTF-8',
  820.     'es_es@euro': 'es_ES.ISO8859-15',
  821.     'es_gt': 'es_GT.ISO8859-1',
  822.     'es_gt.iso88591': 'es_GT.ISO8859-1',
  823.     'es_hn': 'es_HN.ISO8859-1',
  824.     'es_hn.iso88591': 'es_HN.ISO8859-1',
  825.     'es_mx': 'es_MX.ISO8859-1',
  826.     'es_mx.iso88591': 'es_MX.ISO8859-1',
  827.     'es_ni': 'es_NI.ISO8859-1',
  828.     'es_ni.iso88591': 'es_NI.ISO8859-1',
  829.     'es_pa': 'es_PA.ISO8859-1',
  830.     'es_pa.iso88591': 'es_PA.ISO8859-1',
  831.     'es_pa.iso885915': 'es_PA.ISO8859-15',
  832.     'es_pa@euro': 'es_PA.ISO8859-15',
  833.     'es_pe': 'es_PE.ISO8859-1',
  834.     'es_pe.iso88591': 'es_PE.ISO8859-1',
  835.     'es_pe.iso885915': 'es_PE.ISO8859-15',
  836.     'es_pe@euro': 'es_PE.ISO8859-15',
  837.     'es_pr': 'es_PR.ISO8859-1',
  838.     'es_pr.iso88591': 'es_PR.ISO8859-1',
  839.     'es_py': 'es_PY.ISO8859-1',
  840.     'es_py.iso88591': 'es_PY.ISO8859-1',
  841.     'es_py.iso885915': 'es_PY.ISO8859-15',
  842.     'es_py@euro': 'es_PY.ISO8859-15',
  843.     'es_sv': 'es_SV.ISO8859-1',
  844.     'es_sv.iso88591': 'es_SV.ISO8859-1',
  845.     'es_sv.iso885915': 'es_SV.ISO8859-15',
  846.     'es_sv@euro': 'es_SV.ISO8859-15',
  847.     'es_us': 'es_US.ISO8859-1',
  848.     'es_us.iso88591': 'es_US.ISO8859-1',
  849.     'es_uy': 'es_UY.ISO8859-1',
  850.     'es_uy.iso88591': 'es_UY.ISO8859-1',
  851.     'es_uy.iso885915': 'es_UY.ISO8859-15',
  852.     'es_uy@euro': 'es_UY.ISO8859-15',
  853.     'es_ve': 'es_VE.ISO8859-1',
  854.     'es_ve.iso88591': 'es_VE.ISO8859-1',
  855.     'es_ve.iso885915': 'es_VE.ISO8859-15',
  856.     'es_ve@euro': 'es_VE.ISO8859-15',
  857.     'estonian': 'et_EE.ISO8859-1',
  858.     'et': 'et_EE.ISO8859-15',
  859.     'et_ee': 'et_EE.ISO8859-15',
  860.     'et_ee.iso88591': 'et_EE.ISO8859-1',
  861.     'et_ee.iso885913': 'et_EE.ISO8859-13',
  862.     'et_ee.iso885915': 'et_EE.ISO8859-15',
  863.     'et_ee.iso88594': 'et_EE.ISO8859-4',
  864.     'et_ee@euro': 'et_EE.ISO8859-15',
  865.     'eu': 'eu_ES.ISO8859-1',
  866.     'eu_es': 'eu_ES.ISO8859-1',
  867.     'eu_es.iso88591': 'eu_ES.ISO8859-1',
  868.     'eu_es.iso885915': 'eu_ES.ISO8859-15',
  869.     'eu_es.iso885915@euro': 'eu_ES.ISO8859-15',
  870.     'eu_es.utf8@euro': 'eu_ES.UTF-8',
  871.     'eu_es@euro': 'eu_ES.ISO8859-15',
  872.     'fa': 'fa_IR.UTF-8',
  873.     'fa_ir': 'fa_IR.UTF-8',
  874.     'fa_ir.isiri3342': 'fa_IR.ISIRI-3342',
  875.     'fi': 'fi_FI.ISO8859-15',
  876.     'fi_fi': 'fi_FI.ISO8859-15',
  877.     'fi_fi.88591': 'fi_FI.ISO8859-1',
  878.     'fi_fi.iso88591': 'fi_FI.ISO8859-1',
  879.     'fi_fi.iso885915': 'fi_FI.ISO8859-15',
  880.     'fi_fi.iso885915@euro': 'fi_FI.ISO8859-15',
  881.     'fi_fi.utf8@euro': 'fi_FI.UTF-8',
  882.     'fi_fi@euro': 'fi_FI.ISO8859-15',
  883.     'finnish': 'fi_FI.ISO8859-1',
  884.     'finnish.iso88591': 'fi_FI.ISO8859-1',
  885.     'fo': 'fo_FO.ISO8859-1',
  886.     'fo_fo': 'fo_FO.ISO8859-1',
  887.     'fo_fo.iso88591': 'fo_FO.ISO8859-1',
  888.     'fo_fo.iso885915': 'fo_FO.ISO8859-15',
  889.     'fo_fo@euro': 'fo_FO.ISO8859-15',
  890.     'fr': 'fr_FR.ISO8859-1',
  891.     'fr_be': 'fr_BE.ISO8859-1',
  892.     'fr_be.88591': 'fr_BE.ISO8859-1',
  893.     'fr_be.iso88591': 'fr_BE.ISO8859-1',
  894.     'fr_be.iso885915': 'fr_BE.ISO8859-15',
  895.     'fr_be.iso885915@euro': 'fr_BE.ISO8859-15',
  896.     'fr_be.utf8@euro': 'fr_BE.UTF-8',
  897.     'fr_be@euro': 'fr_BE.ISO8859-15',
  898.     'fr_ca': 'fr_CA.ISO8859-1',
  899.     'fr_ca.88591': 'fr_CA.ISO8859-1',
  900.     'fr_ca.iso88591': 'fr_CA.ISO8859-1',
  901.     'fr_ca.iso885915': 'fr_CA.ISO8859-15',
  902.     'fr_ca@euro': 'fr_CA.ISO8859-15',
  903.     'fr_ch': 'fr_CH.ISO8859-1',
  904.     'fr_ch.88591': 'fr_CH.ISO8859-1',
  905.     'fr_ch.iso88591': 'fr_CH.ISO8859-1',
  906.     'fr_ch.iso885915': 'fr_CH.ISO8859-15',
  907.     'fr_ch@euro': 'fr_CH.ISO8859-15',
  908.     'fr_fr': 'fr_FR.ISO8859-1',
  909.     'fr_fr.88591': 'fr_FR.ISO8859-1',
  910.     'fr_fr.iso88591': 'fr_FR.ISO8859-1',
  911.     'fr_fr.iso885915': 'fr_FR.ISO8859-15',
  912.     'fr_fr.iso885915@euro': 'fr_FR.ISO8859-15',
  913.     'fr_fr.utf8@euro': 'fr_FR.UTF-8',
  914.     'fr_fr@euro': 'fr_FR.ISO8859-15',
  915.     'fr_lu': 'fr_LU.ISO8859-1',
  916.     'fr_lu.88591': 'fr_LU.ISO8859-1',
  917.     'fr_lu.iso88591': 'fr_LU.ISO8859-1',
  918.     'fr_lu.iso885915': 'fr_LU.ISO8859-15',
  919.     'fr_lu.iso885915@euro': 'fr_LU.ISO8859-15',
  920.     'fr_lu.utf8@euro': 'fr_LU.UTF-8',
  921.     'fr_lu@euro': 'fr_LU.ISO8859-15',
  922.     'fran\xe7ais': 'fr_FR.ISO8859-1',
  923.     'fran\xef\xbf\xbdis': 'fr_FR.ISO8859-1',
  924.     'fre_fr': 'fr_FR.ISO8859-1',
  925.     'fre_fr.8859': 'fr_FR.ISO8859-1',
  926.     'french': 'fr_FR.ISO8859-1',
  927.     'french.iso88591': 'fr_CH.ISO8859-1',
  928.     'french_france': 'fr_FR.ISO8859-1',
  929.     'french_france.8859': 'fr_FR.ISO8859-1',
  930.     'ga': 'ga_IE.ISO8859-1',
  931.     'ga_ie': 'ga_IE.ISO8859-1',
  932.     'ga_ie.iso88591': 'ga_IE.ISO8859-1',
  933.     'ga_ie.iso885914': 'ga_IE.ISO8859-14',
  934.     'ga_ie.iso885915': 'ga_IE.ISO8859-15',
  935.     'ga_ie.iso885915@euro': 'ga_IE.ISO8859-15',
  936.     'ga_ie.utf8@euro': 'ga_IE.UTF-8',
  937.     'ga_ie@euro': 'ga_IE.ISO8859-15',
  938.     'galego': 'gl_ES.ISO8859-1',
  939.     'galician': 'gl_ES.ISO8859-1',
  940.     'gd': 'gd_GB.ISO8859-1',
  941.     'gd_gb': 'gd_GB.ISO8859-1',
  942.     'gd_gb.iso88591': 'gd_GB.ISO8859-1',
  943.     'gd_gb.iso885914': 'gd_GB.ISO8859-14',
  944.     'gd_gb.iso885915': 'gd_GB.ISO8859-15',
  945.     'gd_gb@euro': 'gd_GB.ISO8859-15',
  946.     'ger_de': 'de_DE.ISO8859-1',
  947.     'ger_de.8859': 'de_DE.ISO8859-1',
  948.     'german': 'de_DE.ISO8859-1',
  949.     'german.iso88591': 'de_CH.ISO8859-1',
  950.     'german_germany': 'de_DE.ISO8859-1',
  951.     'german_germany.8859': 'de_DE.ISO8859-1',
  952.     'gl': 'gl_ES.ISO8859-1',
  953.     'gl_es': 'gl_ES.ISO8859-1',
  954.     'gl_es.iso88591': 'gl_ES.ISO8859-1',
  955.     'gl_es.iso885915': 'gl_ES.ISO8859-15',
  956.     'gl_es.iso885915@euro': 'gl_ES.ISO8859-15',
  957.     'gl_es.utf8@euro': 'gl_ES.UTF-8',
  958.     'gl_es@euro': 'gl_ES.ISO8859-15',
  959.     'greek': 'el_GR.ISO8859-7',
  960.     'greek.iso88597': 'el_GR.ISO8859-7',
  961.     'gv': 'gv_GB.ISO8859-1',
  962.     'gv_gb': 'gv_GB.ISO8859-1',
  963.     'gv_gb.iso88591': 'gv_GB.ISO8859-1',
  964.     'gv_gb.iso885914': 'gv_GB.ISO8859-14',
  965.     'gv_gb.iso885915': 'gv_GB.ISO8859-15',
  966.     'gv_gb@euro': 'gv_GB.ISO8859-15',
  967.     'he': 'he_IL.ISO8859-8',
  968.     'he_il': 'he_IL.ISO8859-8',
  969.     'he_il.cp1255': 'he_IL.CP1255',
  970.     'he_il.iso88598': 'he_IL.ISO8859-8',
  971.     'he_il.microsoftcp1255': 'he_IL.CP1255',
  972.     'hebrew': 'he_IL.ISO8859-8',
  973.     'hebrew.iso88598': 'he_IL.ISO8859-8',
  974.     'hi': 'hi_IN.ISCII-DEV',
  975.     'hi_in': 'hi_IN.ISCII-DEV',
  976.     'hi_in.isciidev': 'hi_IN.ISCII-DEV',
  977.     'hr': 'hr_HR.ISO8859-2',
  978.     'hr_hr': 'hr_HR.ISO8859-2',
  979.     'hr_hr.iso88592': 'hr_HR.ISO8859-2',
  980.     'hrvatski': 'hr_HR.ISO8859-2',
  981.     'hu': 'hu_HU.ISO8859-2',
  982.     'hu_hu': 'hu_HU.ISO8859-2',
  983.     'hu_hu.iso88592': 'hu_HU.ISO8859-2',
  984.     'hungarian': 'hu_HU.ISO8859-2',
  985.     'icelandic': 'is_IS.ISO8859-1',
  986.     'icelandic.iso88591': 'is_IS.ISO8859-1',
  987.     'id': 'id_ID.ISO8859-1',
  988.     'id_id': 'id_ID.ISO8859-1',
  989.     'in': 'id_ID.ISO8859-1',
  990.     'in_id': 'id_ID.ISO8859-1',
  991.     'is': 'is_IS.ISO8859-1',
  992.     'is_is': 'is_IS.ISO8859-1',
  993.     'is_is.iso88591': 'is_IS.ISO8859-1',
  994.     'is_is.iso885915': 'is_IS.ISO8859-15',
  995.     'is_is@euro': 'is_IS.ISO8859-15',
  996.     'iso-8859-1': 'en_US.ISO8859-1',
  997.     'iso-8859-15': 'en_US.ISO8859-15',
  998.     'iso8859-1': 'en_US.ISO8859-1',
  999.     'iso8859-15': 'en_US.ISO8859-15',
  1000.     'iso_8859_1': 'en_US.ISO8859-1',
  1001.     'iso_8859_15': 'en_US.ISO8859-15',
  1002.     'it': 'it_IT.ISO8859-1',
  1003.     'it_ch': 'it_CH.ISO8859-1',
  1004.     'it_ch.iso88591': 'it_CH.ISO8859-1',
  1005.     'it_ch.iso885915': 'it_CH.ISO8859-15',
  1006.     'it_ch@euro': 'it_CH.ISO8859-15',
  1007.     'it_it': 'it_IT.ISO8859-1',
  1008.     'it_it.88591': 'it_IT.ISO8859-1',
  1009.     'it_it.iso88591': 'it_IT.ISO8859-1',
  1010.     'it_it.iso885915': 'it_IT.ISO8859-15',
  1011.     'it_it.iso885915@euro': 'it_IT.ISO8859-15',
  1012.     'it_it.utf8@euro': 'it_IT.UTF-8',
  1013.     'it_it@euro': 'it_IT.ISO8859-15',
  1014.     'italian': 'it_IT.ISO8859-1',
  1015.     'italian.iso88591': 'it_IT.ISO8859-1',
  1016.     'iu': 'iu_CA.NUNACOM-8',
  1017.     'iu_ca': 'iu_CA.NUNACOM-8',
  1018.     'iu_ca.nunacom8': 'iu_CA.NUNACOM-8',
  1019.     'iw': 'he_IL.ISO8859-8',
  1020.     'iw_il': 'he_IL.ISO8859-8',
  1021.     'iw_il.iso88598': 'he_IL.ISO8859-8',
  1022.     'ja': 'ja_JP.eucJP',
  1023.     'ja.jis': 'ja_JP.JIS7',
  1024.     'ja.sjis': 'ja_JP.SJIS',
  1025.     'ja_jp': 'ja_JP.eucJP',
  1026.     'ja_jp.ajec': 'ja_JP.eucJP',
  1027.     'ja_jp.euc': 'ja_JP.eucJP',
  1028.     'ja_jp.eucjp': 'ja_JP.eucJP',
  1029.     'ja_jp.iso-2022-jp': 'ja_JP.JIS7',
  1030.     'ja_jp.iso2022jp': 'ja_JP.JIS7',
  1031.     'ja_jp.jis': 'ja_JP.JIS7',
  1032.     'ja_jp.jis7': 'ja_JP.JIS7',
  1033.     'ja_jp.mscode': 'ja_JP.SJIS',
  1034.     'ja_jp.sjis': 'ja_JP.SJIS',
  1035.     'ja_jp.ujis': 'ja_JP.eucJP',
  1036.     'japan': 'ja_JP.eucJP',
  1037.     'japanese': 'ja_JP.eucJP',
  1038.     'japanese-euc': 'ja_JP.eucJP',
  1039.     'japanese.euc': 'ja_JP.eucJP',
  1040.     'japanese.sjis': 'ja_JP.SJIS',
  1041.     'jp_jp': 'ja_JP.eucJP',
  1042.     'ka': 'ka_GE.GEORGIAN-ACADEMY',
  1043.     'ka_ge': 'ka_GE.GEORGIAN-ACADEMY',
  1044.     'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY',
  1045.     'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS',
  1046.     'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY',
  1047.     'kl': 'kl_GL.ISO8859-1',
  1048.     'kl_gl': 'kl_GL.ISO8859-1',
  1049.     'kl_gl.iso88591': 'kl_GL.ISO8859-1',
  1050.     'kl_gl.iso885915': 'kl_GL.ISO8859-15',
  1051.     'kl_gl@euro': 'kl_GL.ISO8859-15',
  1052.     'km': 'km_KH.UTF-8',
  1053.     'km_kh': 'km_KH.UTF-8',
  1054.     'kn': 'kn_IN.UTF-8',
  1055.     'ko': 'ko_KR.eucKR',
  1056.     'ko_kr': 'ko_KR.eucKR',
  1057.     'ko_kr.euc': 'ko_KR.eucKR',
  1058.     'ko_kr.euckr': 'ko_KR.eucKR',
  1059.     'korean': 'ko_KR.eucKR',
  1060.     'korean.euc': 'ko_KR.eucKR',
  1061.     'kw': 'kw_GB.ISO8859-1',
  1062.     'kw_gb': 'kw_GB.ISO8859-1',
  1063.     'kw_gb.iso88591': 'kw_GB.ISO8859-1',
  1064.     'kw_gb.iso885914': 'kw_GB.ISO8859-14',
  1065.     'kw_gb.iso885915': 'kw_GB.ISO8859-15',
  1066.     'kw_gb@euro': 'kw_GB.ISO8859-15',
  1067.     'ky': 'ky_KG.UTF-8',
  1068.     'ky_kg': 'ky_KG.UTF-8',
  1069.     'lithuanian': 'lt_LT.ISO8859-13',
  1070.     'lo': 'lo_LA.MULELAO-1',
  1071.     'lo_la': 'lo_LA.MULELAO-1',
  1072.     'lo_la.cp1133': 'lo_LA.IBM-CP1133',
  1073.     'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133',
  1074.     'lo_la.mulelao1': 'lo_LA.MULELAO-1',
  1075.     'lt': 'lt_LT.ISO8859-13',
  1076.     'lt_lt': 'lt_LT.ISO8859-13',
  1077.     'lt_lt.iso885913': 'lt_LT.ISO8859-13',
  1078.     'lt_lt.iso88594': 'lt_LT.ISO8859-4',
  1079.     'lv': 'lv_LV.ISO8859-13',
  1080.     'lv_lv': 'lv_LV.ISO8859-13',
  1081.     'lv_lv.iso885913': 'lv_LV.ISO8859-13',
  1082.     'lv_lv.iso88594': 'lv_LV.ISO8859-4',
  1083.     'mi': 'mi_NZ.ISO8859-1',
  1084.     'mi_nz': 'mi_NZ.ISO8859-1',
  1085.     'mi_nz.iso88591': 'mi_NZ.ISO8859-1',
  1086.     'mk': 'mk_MK.ISO8859-5',
  1087.     'mk_mk': 'mk_MK.ISO8859-5',
  1088.     'mk_mk.cp1251': 'mk_MK.CP1251',
  1089.     'mk_mk.iso88595': 'mk_MK.ISO8859-5',
  1090.     'mk_mk.microsoftcp1251': 'mk_MK.CP1251',
  1091.     'ml': 'ml_IN.UTF-8',
  1092.     'mr_in': 'mr_IN.UTF-8',
  1093.     'ms': 'ms_MY.ISO8859-1',
  1094.     'ms_my': 'ms_MY.ISO8859-1',
  1095.     'ms_my.iso88591': 'ms_MY.ISO8859-1',
  1096.     'mt': 'mt_MT.ISO8859-3',
  1097.     'mt_mt': 'mt_MT.ISO8859-3',
  1098.     'mt_mt.iso88593': 'mt_MT.ISO8859-3',
  1099.     'nb': 'nb_NO.ISO8859-1',
  1100.     'nb_no': 'nb_NO.ISO8859-1',
  1101.     'nb_no.88591': 'nb_NO.ISO8859-1',
  1102.     'nb_no.iso88591': 'nb_NO.ISO8859-1',
  1103.     'nb_no.iso885915': 'nb_NO.ISO8859-15',
  1104.     'nb_no@euro': 'nb_NO.ISO8859-15',
  1105.     'nl': 'nl_NL.ISO8859-1',
  1106.     'nl_be': 'nl_BE.ISO8859-1',
  1107.     'nl_be.88591': 'nl_BE.ISO8859-1',
  1108.     'nl_be.iso88591': 'nl_BE.ISO8859-1',
  1109.     'nl_be.iso885915': 'nl_BE.ISO8859-15',
  1110.     'nl_be.iso885915@euro': 'nl_BE.ISO8859-15',
  1111.     'nl_be.utf8@euro': 'nl_BE.UTF-8',
  1112.     'nl_be@euro': 'nl_BE.ISO8859-15',
  1113.     'nl_nl': 'nl_NL.ISO8859-1',
  1114.     'nl_nl.88591': 'nl_NL.ISO8859-1',
  1115.     'nl_nl.iso88591': 'nl_NL.ISO8859-1',
  1116.     'nl_nl.iso885915': 'nl_NL.ISO8859-15',
  1117.     'nl_nl.iso885915@euro': 'nl_NL.ISO8859-15',
  1118.     'nl_nl.utf8@euro': 'nl_NL.UTF-8',
  1119.     'nl_nl@euro': 'nl_NL.ISO8859-15',
  1120.     'nn': 'nn_NO.ISO8859-1',
  1121.     'nn_no': 'nn_NO.ISO8859-1',
  1122.     'nn_no.88591': 'nn_NO.ISO8859-1',
  1123.     'nn_no.iso88591': 'nn_NO.ISO8859-1',
  1124.     'nn_no.iso885915': 'nn_NO.ISO8859-15',
  1125.     'nn_no@euro': 'nn_NO.ISO8859-15',
  1126.     'no': 'no_NO.ISO8859-1',
  1127.     'no@nynorsk': 'ny_NO.ISO8859-1',
  1128.     'no_no': 'no_NO.ISO8859-1',
  1129.     'no_no.88591': 'no_NO.ISO8859-1',
  1130.     'no_no.iso88591': 'no_NO.ISO8859-1',
  1131.     'no_no.iso885915': 'no_NO.ISO8859-15',
  1132.     'no_no@euro': 'no_NO.ISO8859-15',
  1133.     'norwegian': 'no_NO.ISO8859-1',
  1134.     'norwegian.iso88591': 'no_NO.ISO8859-1',
  1135.     'nr': 'nr_ZA.ISO8859-1',
  1136.     'nr_za': 'nr_ZA.ISO8859-1',
  1137.     'nr_za.iso88591': 'nr_ZA.ISO8859-1',
  1138.     'nso': 'nso_ZA.ISO8859-15',
  1139.     'nso_za': 'nso_ZA.ISO8859-15',
  1140.     'nso_za.iso885915': 'nso_ZA.ISO8859-15',
  1141.     'ny': 'ny_NO.ISO8859-1',
  1142.     'ny_no': 'ny_NO.ISO8859-1',
  1143.     'ny_no.88591': 'ny_NO.ISO8859-1',
  1144.     'ny_no.iso88591': 'ny_NO.ISO8859-1',
  1145.     'ny_no.iso885915': 'ny_NO.ISO8859-15',
  1146.     'ny_no@euro': 'ny_NO.ISO8859-15',
  1147.     'nynorsk': 'nn_NO.ISO8859-1',
  1148.     'oc': 'oc_FR.ISO8859-1',
  1149.     'oc_fr': 'oc_FR.ISO8859-1',
  1150.     'oc_fr.iso88591': 'oc_FR.ISO8859-1',
  1151.     'oc_fr.iso885915': 'oc_FR.ISO8859-15',
  1152.     'oc_fr@euro': 'oc_FR.ISO8859-15',
  1153.     'or': 'or_IN.UTF-8',
  1154.     'pd': 'pd_US.ISO8859-1',
  1155.     'pd_de': 'pd_DE.ISO8859-1',
  1156.     'pd_de.iso88591': 'pd_DE.ISO8859-1',
  1157.     'pd_de.iso885915': 'pd_DE.ISO8859-15',
  1158.     'pd_de@euro': 'pd_DE.ISO8859-15',
  1159.     'pd_us': 'pd_US.ISO8859-1',
  1160.     'pd_us.iso88591': 'pd_US.ISO8859-1',
  1161.     'pd_us.iso885915': 'pd_US.ISO8859-15',
  1162.     'pd_us@euro': 'pd_US.ISO8859-15',
  1163.     'ph': 'ph_PH.ISO8859-1',
  1164.     'ph_ph': 'ph_PH.ISO8859-1',
  1165.     'ph_ph.iso88591': 'ph_PH.ISO8859-1',
  1166.     'pl': 'pl_PL.ISO8859-2',
  1167.     'pl_pl': 'pl_PL.ISO8859-2',
  1168.     'pl_pl.iso88592': 'pl_PL.ISO8859-2',
  1169.     'polish': 'pl_PL.ISO8859-2',
  1170.     'portuguese': 'pt_PT.ISO8859-1',
  1171.     'portuguese.iso88591': 'pt_PT.ISO8859-1',
  1172.     'portuguese_brazil': 'pt_BR.ISO8859-1',
  1173.     'portuguese_brazil.8859': 'pt_BR.ISO8859-1',
  1174.     'posix': 'C',
  1175.     'posix-utf2': 'C',
  1176.     'pp': 'pp_AN.ISO8859-1',
  1177.     'pp_an': 'pp_AN.ISO8859-1',
  1178.     'pp_an.iso88591': 'pp_AN.ISO8859-1',
  1179.     'pt': 'pt_PT.ISO8859-1',
  1180.     'pt_br': 'pt_BR.ISO8859-1',
  1181.     'pt_br.88591': 'pt_BR.ISO8859-1',
  1182.     'pt_br.iso88591': 'pt_BR.ISO8859-1',
  1183.     'pt_br.iso885915': 'pt_BR.ISO8859-15',
  1184.     'pt_br@euro': 'pt_BR.ISO8859-15',
  1185.     'pt_pt': 'pt_PT.ISO8859-1',
  1186.     'pt_pt.88591': 'pt_PT.ISO8859-1',
  1187.     'pt_pt.iso88591': 'pt_PT.ISO8859-1',
  1188.     'pt_pt.iso885915': 'pt_PT.ISO8859-15',
  1189.     'pt_pt.iso885915@euro': 'pt_PT.ISO8859-15',
  1190.     'pt_pt.utf8@euro': 'pt_PT.UTF-8',
  1191.     'pt_pt@euro': 'pt_PT.ISO8859-15',
  1192.     'ro': 'ro_RO.ISO8859-2',
  1193.     'ro_ro': 'ro_RO.ISO8859-2',
  1194.     'ro_ro.iso88592': 'ro_RO.ISO8859-2',
  1195.     'romanian': 'ro_RO.ISO8859-2',
  1196.     'ru': 'ru_RU.UTF-8',
  1197.     'ru_ru': 'ru_RU.UTF-8',
  1198.     'ru_ru.cp1251': 'ru_RU.CP1251',
  1199.     'ru_ru.iso88595': 'ru_RU.ISO8859-5',
  1200.     'ru_ru.koi8r': 'ru_RU.KOI8-R',
  1201.     'ru_ru.microsoftcp1251': 'ru_RU.CP1251',
  1202.     'ru_ua': 'ru_UA.KOI8-U',
  1203.     'ru_ua.cp1251': 'ru_UA.CP1251',
  1204.     'ru_ua.koi8u': 'ru_UA.KOI8-U',
  1205.     'ru_ua.microsoftcp1251': 'ru_UA.CP1251',
  1206.     'rumanian': 'ro_RO.ISO8859-2',
  1207.     'russian': 'ru_RU.KOI8-R',
  1208.     'rw': 'rw_RW.ISO8859-1',
  1209.     'rw_rw': 'rw_RW.ISO8859-1',
  1210.     'rw_rw.iso88591': 'rw_RW.ISO8859-1',
  1211.     'se_no': 'se_NO.UTF-8',
  1212.     'serbocroatian': 'sr_CS.ISO8859-2',
  1213.     'sh': 'sr_CS.ISO8859-2',
  1214.     'sh_hr': 'sh_HR.ISO8859-2',
  1215.     'sh_hr.iso88592': 'sh_HR.ISO8859-2',
  1216.     'sh_sp': 'sr_CS.ISO8859-2',
  1217.     'sh_yu': 'sr_CS.ISO8859-2',
  1218.     'si': 'si_LK.UTF-8',
  1219.     'si_lk': 'si_LK.UTF-8',
  1220.     'sid_et': 'sid_ET.UTF-8',
  1221.     'sinhala': 'si_LK.UTF-8',
  1222.     'sk': 'sk_SK.ISO8859-2',
  1223.     'sk_sk': 'sk_SK.ISO8859-2',
  1224.     'sk_sk.iso88592': 'sk_SK.ISO8859-2',
  1225.     'sl': 'sl_SI.ISO8859-2',
  1226.     'sl_cs': 'sl_CS.ISO8859-2',
  1227.     'sl_si': 'sl_SI.ISO8859-2',
  1228.     'sl_si.iso88592': 'sl_SI.ISO8859-2',
  1229.     'slovak': 'sk_SK.ISO8859-2',
  1230.     'slovene': 'sl_SI.ISO8859-2',
  1231.     'slovenian': 'sl_SI.ISO8859-2',
  1232.     'sp': 'sr_CS.ISO8859-5',
  1233.     'sp_yu': 'sr_CS.ISO8859-5',
  1234.     'spanish': 'es_ES.ISO8859-1',
  1235.     'spanish.iso88591': 'es_ES.ISO8859-1',
  1236.     'spanish_spain': 'es_ES.ISO8859-1',
  1237.     'spanish_spain.8859': 'es_ES.ISO8859-1',
  1238.     'sq': 'sq_AL.ISO8859-2',
  1239.     'sq_al': 'sq_AL.ISO8859-2',
  1240.     'sq_al.iso88592': 'sq_AL.ISO8859-2',
  1241.     'sr': 'sr_CS.ISO8859-5',
  1242.     'sr@cyrillic': 'sr_CS.ISO8859-5',
  1243.     'sr@latn': 'sr_CS.ISO8859-2',
  1244.     'sr_cs.iso88592': 'sr_CS.ISO8859-2',
  1245.     'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2',
  1246.     'sr_cs.iso88595': 'sr_CS.ISO8859-5',
  1247.     'sr_cs.utf8@latn': 'sr_CS.UTF-8',
  1248.     'sr_cs@latn': 'sr_CS.ISO8859-2',
  1249.     'sr_sp': 'sr_CS.ISO8859-2',
  1250.     'sr_yu': 'sr_CS.ISO8859-5',
  1251.     'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251',
  1252.     'sr_yu.iso88592': 'sr_CS.ISO8859-2',
  1253.     'sr_yu.iso88595': 'sr_CS.ISO8859-5',
  1254.     'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5',
  1255.     'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251',
  1256.     'sr_yu.utf8@cyrillic': 'sr_CS.UTF-8',
  1257.     'sr_yu@cyrillic': 'sr_CS.ISO8859-5',
  1258.     'ss': 'ss_ZA.ISO8859-1',
  1259.     'ss_za': 'ss_ZA.ISO8859-1',
  1260.     'ss_za.iso88591': 'ss_ZA.ISO8859-1',
  1261.     'st': 'st_ZA.ISO8859-1',
  1262.     'st_za': 'st_ZA.ISO8859-1',
  1263.     'st_za.iso88591': 'st_ZA.ISO8859-1',
  1264.     'sv': 'sv_SE.ISO8859-1',
  1265.     'sv_fi': 'sv_FI.ISO8859-1',
  1266.     'sv_fi.iso88591': 'sv_FI.ISO8859-1',
  1267.     'sv_fi.iso885915': 'sv_FI.ISO8859-15',
  1268.     'sv_fi.iso885915@euro': 'sv_FI.ISO8859-15',
  1269.     'sv_fi.utf8@euro': 'sv_FI.UTF-8',
  1270.     'sv_fi@euro': 'sv_FI.ISO8859-15',
  1271.     'sv_se': 'sv_SE.ISO8859-1',
  1272.     'sv_se.88591': 'sv_SE.ISO8859-1',
  1273.     'sv_se.iso88591': 'sv_SE.ISO8859-1',
  1274.     'sv_se.iso885915': 'sv_SE.ISO8859-15',
  1275.     'sv_se@euro': 'sv_SE.ISO8859-15',
  1276.     'swedish': 'sv_SE.ISO8859-1',
  1277.     'swedish.iso88591': 'sv_SE.ISO8859-1',
  1278.     'ta': 'ta_IN.TSCII-0',
  1279.     'ta_in': 'ta_IN.TSCII-0',
  1280.     'ta_in.tscii': 'ta_IN.TSCII-0',
  1281.     'ta_in.tscii0': 'ta_IN.TSCII-0',
  1282.     'te': 'te_IN.UTF-8',
  1283.     'tg': 'tg_TJ.KOI8-C',
  1284.     'tg_tj': 'tg_TJ.KOI8-C',
  1285.     'tg_tj.koi8c': 'tg_TJ.KOI8-C',
  1286.     'th': 'th_TH.ISO8859-11',
  1287.     'th_th': 'th_TH.ISO8859-11',
  1288.     'th_th.iso885911': 'th_TH.ISO8859-11',
  1289.     'th_th.tactis': 'th_TH.TIS620',
  1290.     'th_th.tis620': 'th_TH.TIS620',
  1291.     'thai': 'th_TH.ISO8859-11',
  1292.     'tl': 'tl_PH.ISO8859-1',
  1293.     'tl_ph': 'tl_PH.ISO8859-1',
  1294.     'tl_ph.iso88591': 'tl_PH.ISO8859-1',
  1295.     'tn': 'tn_ZA.ISO8859-15',
  1296.     'tn_za': 'tn_ZA.ISO8859-15',
  1297.     'tn_za.iso885915': 'tn_ZA.ISO8859-15',
  1298.     'tr': 'tr_TR.ISO8859-9',
  1299.     'tr_tr': 'tr_TR.ISO8859-9',
  1300.     'tr_tr.iso88599': 'tr_TR.ISO8859-9',
  1301.     'ts': 'ts_ZA.ISO8859-1',
  1302.     'ts_za': 'ts_ZA.ISO8859-1',
  1303.     'ts_za.iso88591': 'ts_ZA.ISO8859-1',
  1304.     'tt': 'tt_RU.TATAR-CYR',
  1305.     'tt_ru': 'tt_RU.TATAR-CYR',
  1306.     'tt_ru.koi8c': 'tt_RU.KOI8-C',
  1307.     'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR',
  1308.     'turkish': 'tr_TR.ISO8859-9',
  1309.     'turkish.iso88599': 'tr_TR.ISO8859-9',
  1310.     'uk': 'uk_UA.KOI8-U',
  1311.     'uk_ua': 'uk_UA.KOI8-U',
  1312.     'uk_ua.cp1251': 'uk_UA.CP1251',
  1313.     'uk_ua.iso88595': 'uk_UA.ISO8859-5',
  1314.     'uk_ua.koi8u': 'uk_UA.KOI8-U',
  1315.     'uk_ua.microsoftcp1251': 'uk_UA.CP1251',
  1316.     'univ': 'en_US.UTF-8',
  1317.     'universal': 'en_US.UTF-8',
  1318.     'universal.utf8@ucs4': 'en_US.UTF-8',
  1319.     'ur': 'ur_PK.CP1256',
  1320.     'ur_pk': 'ur_PK.CP1256',
  1321.     'ur_pk.cp1256': 'ur_PK.CP1256',
  1322.     'ur_pk.microsoftcp1256': 'ur_PK.CP1256',
  1323.     'uz': 'uz_UZ.UTF-8',
  1324.     'uz_uz': 'uz_UZ.UTF-8',
  1325.     'uz_uz.iso88591': 'uz_UZ.ISO8859-1',
  1326.     'uz_uz.utf8@cyrillic': 'uz_UZ.UTF-8',
  1327.     'uz_uz@cyrillic': 'uz_UZ.UTF-8',
  1328.     've': 've_ZA.UTF-8',
  1329.     've_za': 've_ZA.UTF-8',
  1330.     'vi': 'vi_VN.TCVN',
  1331.     'vi_vn': 'vi_VN.TCVN',
  1332.     'vi_vn.tcvn': 'vi_VN.TCVN',
  1333.     'vi_vn.tcvn5712': 'vi_VN.TCVN',
  1334.     'vi_vn.viscii': 'vi_VN.VISCII',
  1335.     'vi_vn.viscii111': 'vi_VN.VISCII',
  1336.     'wa': 'wa_BE.ISO8859-1',
  1337.     'wa_be': 'wa_BE.ISO8859-1',
  1338.     'wa_be.iso88591': 'wa_BE.ISO8859-1',
  1339.     'wa_be.iso885915': 'wa_BE.ISO8859-15',
  1340.     'wa_be.iso885915@euro': 'wa_BE.ISO8859-15',
  1341.     'wa_be@euro': 'wa_BE.ISO8859-15',
  1342.     'xh': 'xh_ZA.ISO8859-1',
  1343.     'xh_za': 'xh_ZA.ISO8859-1',
  1344.     'xh_za.iso88591': 'xh_ZA.ISO8859-1',
  1345.     'yi': 'yi_US.CP1255',
  1346.     'yi_us': 'yi_US.CP1255',
  1347.     'yi_us.cp1255': 'yi_US.CP1255',
  1348.     'yi_us.microsoftcp1255': 'yi_US.CP1255',
  1349.     'zh': 'zh_CN.eucCN',
  1350.     'zh_cn': 'zh_CN.gb2312',
  1351.     'zh_cn.big5': 'zh_TW.big5',
  1352.     'zh_cn.euc': 'zh_CN.eucCN',
  1353.     'zh_cn.gb18030': 'zh_CN.gb18030',
  1354.     'zh_cn.gb2312': 'zh_CN.gb2312',
  1355.     'zh_cn.gbk': 'zh_CN.gbk',
  1356.     'zh_hk': 'zh_HK.big5hkscs',
  1357.     'zh_hk.big5': 'zh_HK.big5',
  1358.     'zh_hk.big5hkscs': 'zh_HK.big5hkscs',
  1359.     'zh_tw': 'zh_TW.big5',
  1360.     'zh_tw.big5': 'zh_TW.big5',
  1361.     'zh_tw.euc': 'zh_TW.eucTW',
  1362.     'zh_tw.euctw': 'zh_TW.eucTW',
  1363.     'zu': 'zu_ZA.ISO8859-1',
  1364.     'zu_za': 'zu_ZA.ISO8859-1',
  1365.     'zu_za.iso88591': 'zu_ZA.ISO8859-1' }
  1366. windows_locale = {
  1367.     1078: 'af_ZA',
  1368.     1052: 'sq_AL',
  1369.     1025: 'ar_SA',
  1370.     2049: 'ar_IQ',
  1371.     3073: 'ar_EG',
  1372.     4097: 'ar_LY',
  1373.     5121: 'ar_DZ',
  1374.     6145: 'ar_MA',
  1375.     7169: 'ar_TN',
  1376.     8193: 'ar_OM',
  1377.     9217: 'ar_YE',
  1378.     10241: 'ar_SY',
  1379.     11265: 'ar_JO',
  1380.     12289: 'ar_LB',
  1381.     13313: 'ar_KW',
  1382.     14337: 'ar_AE',
  1383.     15361: 'ar_BH',
  1384.     16385: 'ar_QA',
  1385.     1067: 'hy_AM',
  1386.     1068: 'az_AZ',
  1387.     2092: 'az_AZ',
  1388.     1069: 'eu_ES',
  1389.     1059: 'be_BY',
  1390.     1093: 'bn_IN',
  1391.     8218: 'bs_BA',
  1392.     5146: 'bs_BA',
  1393.     1150: 'br_FR',
  1394.     1026: 'bg_BG',
  1395.     1027: 'ca_ES',
  1396.     4: 'zh_CHS',
  1397.     1028: 'zh_TW',
  1398.     2052: 'zh_CN',
  1399.     3076: 'zh_HK',
  1400.     4100: 'zh_SG',
  1401.     5124: 'zh_MO',
  1402.     31748: 'zh_CHT',
  1403.     1050: 'hr_HR',
  1404.     4122: 'hr_BA',
  1405.     1029: 'cs_CZ',
  1406.     1030: 'da_DK',
  1407.     1164: 'gbz_AF',
  1408.     1125: 'div_MV',
  1409.     1043: 'nl_NL',
  1410.     2067: 'nl_BE',
  1411.     1033: 'en_US',
  1412.     2057: 'en_GB',
  1413.     3081: 'en_AU',
  1414.     4105: 'en_CA',
  1415.     5129: 'en_NZ',
  1416.     6153: 'en_IE',
  1417.     7177: 'en_ZA',
  1418.     8201: 'en_JA',
  1419.     9225: 'en_CB',
  1420.     10249: 'en_BZ',
  1421.     11273: 'en_TT',
  1422.     12297: 'en_ZW',
  1423.     13321: 'en_PH',
  1424.     1061: 'et_EE',
  1425.     1080: 'fo_FO',
  1426.     1124: 'fil_PH',
  1427.     1035: 'fi_FI',
  1428.     1036: 'fr_FR',
  1429.     2060: 'fr_BE',
  1430.     3084: 'fr_CA',
  1431.     4108: 'fr_CH',
  1432.     5132: 'fr_LU',
  1433.     6156: 'fr_MC',
  1434.     1122: 'fy_NL',
  1435.     1110: 'gl_ES',
  1436.     1079: 'ka_GE',
  1437.     1031: 'de_DE',
  1438.     2055: 'de_CH',
  1439.     3079: 'de_AT',
  1440.     4103: 'de_LU',
  1441.     5127: 'de_LI',
  1442.     1032: 'el_GR',
  1443.     1095: 'gu_IN',
  1444.     1037: 'he_IL',
  1445.     1081: 'hi_IN',
  1446.     1038: 'hu_HU',
  1447.     1039: 'is_IS',
  1448.     1057: 'id_ID',
  1449.     1117: 'iu_CA',
  1450.     2141: 'iu_CA',
  1451.     2108: 'ga_IE',
  1452.     1076: 'xh_ZA',
  1453.     1077: 'zu_ZA',
  1454.     1040: 'it_IT',
  1455.     2064: 'it_CH',
  1456.     1041: 'ja_JP',
  1457.     1099: 'kn_IN',
  1458.     1087: 'kk_KZ',
  1459.     1111: 'kok_IN',
  1460.     1042: 'ko_KR',
  1461.     1088: 'ky_KG',
  1462.     1062: 'lv_LV',
  1463.     1063: 'lt_LT',
  1464.     1134: 'lb_LU',
  1465.     1071: 'mk_MK',
  1466.     1086: 'ms_MY',
  1467.     2110: 'ms_BN',
  1468.     1100: 'ml_IN',
  1469.     1082: 'mt_MT',
  1470.     1153: 'mi_NZ',
  1471.     1146: 'arn_CL',
  1472.     1102: 'mr_IN',
  1473.     1148: 'moh_CA',
  1474.     1104: 'mn_MN',
  1475.     1121: 'ne_NP',
  1476.     1044: 'nb_NO',
  1477.     2068: 'nn_NO',
  1478.     1154: 'oc_FR',
  1479.     1096: 'or_IN',
  1480.     1123: 'ps_AF',
  1481.     1065: 'fa_IR',
  1482.     1045: 'pl_PL',
  1483.     1046: 'pt_BR',
  1484.     2070: 'pt_PT',
  1485.     1094: 'pa_IN',
  1486.     1131: 'quz_BO',
  1487.     2155: 'quz_EC',
  1488.     3179: 'quz_PE',
  1489.     1048: 'ro_RO',
  1490.     1047: 'rm_CH',
  1491.     1049: 'ru_RU',
  1492.     9275: 'smn_FI',
  1493.     4155: 'smj_NO',
  1494.     5179: 'smj_SE',
  1495.     1083: 'se_NO',
  1496.     2107: 'se_SE',
  1497.     3131: 'se_FI',
  1498.     8251: 'sms_FI',
  1499.     6203: 'sma_NO',
  1500.     7227: 'sma_SE',
  1501.     1103: 'sa_IN',
  1502.     3098: 'sr_SP',
  1503.     7194: 'sr_BA',
  1504.     2074: 'sr_SP',
  1505.     6170: 'sr_BA',
  1506.     1132: 'ns_ZA',
  1507.     1074: 'tn_ZA',
  1508.     1051: 'sk_SK',
  1509.     1060: 'sl_SI',
  1510.     1034: 'es_ES',
  1511.     2058: 'es_MX',
  1512.     3082: 'es_ES',
  1513.     4106: 'es_GT',
  1514.     5130: 'es_CR',
  1515.     6154: 'es_PA',
  1516.     7178: 'es_DO',
  1517.     8202: 'es_VE',
  1518.     9226: 'es_CO',
  1519.     10250: 'es_PE',
  1520.     11274: 'es_AR',
  1521.     12298: 'es_EC',
  1522.     13322: 'es_CL',
  1523.     14346: 'es_UR',
  1524.     15370: 'es_PY',
  1525.     16394: 'es_BO',
  1526.     17418: 'es_SV',
  1527.     18442: 'es_HN',
  1528.     19466: 'es_NI',
  1529.     20490: 'es_PR',
  1530.     1089: 'sw_KE',
  1531.     1053: 'sv_SE',
  1532.     2077: 'sv_FI',
  1533.     1114: 'syr_SY',
  1534.     1097: 'ta_IN',
  1535.     1092: 'tt_RU',
  1536.     1098: 'te_IN',
  1537.     1054: 'th_TH',
  1538.     1055: 'tr_TR',
  1539.     1058: 'uk_UA',
  1540.     1056: 'ur_PK',
  1541.     2080: 'ur_IN',
  1542.     1091: 'uz_UZ',
  1543.     2115: 'uz_UZ',
  1544.     1066: 'vi_VN',
  1545.     1106: 'cy_GB' }
  1546.  
  1547. def _print_locale():
  1548.     ''' Test function.
  1549.     '''
  1550.     categories = { }
  1551.     
  1552.     def _init_categories(categories = categories):
  1553.         for k, v in globals().items():
  1554.             if k[:3] == 'LC_':
  1555.                 categories[k] = v
  1556.                 continue
  1557.         
  1558.  
  1559.     _init_categories()
  1560.     del categories['LC_ALL']
  1561.     print 'Locale defaults as determined by getdefaultlocale():'
  1562.     print '-' * 72
  1563.     (lang, enc) = getdefaultlocale()
  1564.     print 'Language: ',
  1565.     if not lang:
  1566.         pass
  1567.     print '(undefined)'
  1568.     print 'Encoding: ',
  1569.     if not enc:
  1570.         pass
  1571.     print '(undefined)'
  1572.     print 
  1573.     print 'Locale settings on startup:'
  1574.     print '-' * 72
  1575.     for name, category in categories.items():
  1576.         print name, '...'
  1577.         (lang, enc) = getlocale(category)
  1578.         print '   Language: ',
  1579.         if not lang:
  1580.             pass
  1581.         print '(undefined)'
  1582.         print '   Encoding: ',
  1583.         if not enc:
  1584.             pass
  1585.         print '(undefined)'
  1586.         print 
  1587.     
  1588.     print 
  1589.     print 'Locale settings after calling resetlocale():'
  1590.     print '-' * 72
  1591.     resetlocale()
  1592.     for name, category in categories.items():
  1593.         print name, '...'
  1594.         (lang, enc) = getlocale(category)
  1595.         print '   Language: ',
  1596.         if not lang:
  1597.             pass
  1598.         print '(undefined)'
  1599.         print '   Encoding: ',
  1600.         if not enc:
  1601.             pass
  1602.         print '(undefined)'
  1603.         print 
  1604.     
  1605.     
  1606.     try:
  1607.         setlocale(LC_ALL, '')
  1608.     except:
  1609.         print 'NOTE:'
  1610.         print 'setlocale(LC_ALL, "") does not support the default locale'
  1611.         print 'given in the OS environment variables.'
  1612.  
  1613.     print 
  1614.     print 'Locale settings after calling setlocale(LC_ALL, ""):'
  1615.     print '-' * 72
  1616.     for name, category in categories.items():
  1617.         print name, '...'
  1618.         (lang, enc) = getlocale(category)
  1619.         print '   Language: ',
  1620.         if not lang:
  1621.             pass
  1622.         print '(undefined)'
  1623.         print '   Encoding: ',
  1624.         if not enc:
  1625.             pass
  1626.         print '(undefined)'
  1627.         print 
  1628.     
  1629.  
  1630.  
  1631. try:
  1632.     LC_MESSAGES
  1633. except NameError:
  1634.     pass
  1635.  
  1636. __all__.append('LC_MESSAGES')
  1637. if __name__ == '__main__':
  1638.     print 'Locale aliasing:'
  1639.     print 
  1640.     _print_locale()
  1641.     print 
  1642.     print 'Number formatting:'
  1643.     print 
  1644.     _test()
  1645.  
  1646.